package ThreadTest;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/*
实现线程的第三种方式：
    实现Callable接口
    可以获取线程执行结束后的返回值
    效率比较低，在获取t线程执行结果的时候，当前线程受阻塞，效率较低
 */
public class ThreadTest8 {
    public static void main(String[] args) {
       //第一步：创建一个“未来任务类”对象
       FutureTask task = new FutureTask(new Callable<String>(){

           @Override
           public String call() throws Exception {
               Thread.sleep(1000);
               String s = "123";
               return s;
           }
       });
        Thread thread = new Thread(task);
        thread.start();

        //在主线程中怎么获取支线线程的返回值？
        try {
            System.out.println(task.get());
            //main方法这里的程序要想执行必须等待get方法的结束
            //而get方法可能需要很久，因为get方法是为了拿另一个线程的执行结果
            //另一个线程执行是需要时间的
            System.out.println("你好");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}
